
% Fe_patch_ff calcule l'effort généralisé du problème complet associé à un
% patch.




function [ Fcl ] = Fe_patch_ff( patch , nPatch,  donnees , nSousElements , maillage , uh ,poutre,sousPoutre )


F = zeros( 2*((size(maillage,1)-1)*nSousElements+1) , 1 ) ;



if (patch~=1)*(patch~=nPatch)

for epsilon=1:-2:-1      % dans chaque élément du patch
    
%         patch
%         ((patch-1+(1-epsilon)/2) -1 )*2+1
    
    sousDonnees=donnees ;
    sousDonnees.poutre.L = maillage(patch+(1-epsilon)/2)-maillage(patch-1+(1-epsilon)/2) ;
    sousDonnees.nombreElements = nSousElements ;
    
    sousMaillage = Mailleur_uniforme(sousDonnees) ;
    
    uhLocal = uh( ((patch-1+(1-epsilon)/2) -1 )*2+1 : (((patch-1+(1-epsilon)/2) -1 )*2+1) +3 ) ;
    
    Fee = Assemblage_F_element_fluxfree(sousMaillage,uhLocal,epsilon,poutre,sousPoutre);
    
    if epsilon==1
        FeG = Fee ;
    else
        FeD = Fee ;
    end
    
end

Fe = Assemblage_F_patch_fluxfree( FeG,FeD ) ;

end





if patch==1
    epsilon=-1;
    
%         patch
%         ((patch-1+(1-epsilon)/2) -1 )*2+1
    
    sousDonnees=donnees ;
    sousDonnees.poutre.L = maillage(patch+(1-epsilon)/2)-maillage(patch-1+(1-epsilon)/2) ;
    sousDonnees.nombreElements = nSousElements ;
    
    sousMaillage = Mailleur_uniforme(sousDonnees) ;
    
    uhLocal = uh( ((patch-1+(1-epsilon)/2) -1 )*2+1 : (((patch-1+(1-epsilon)/2) -1 )*2+1) +3 ) ;
    
    Fe = Assemblage_F_element_fluxfree(sousMaillage,uhLocal,epsilon,poutre,sousPoutre) ;
    
%     Ce = [1,0,zeros(1,size(Fe,1)-2);0,1,zeros(1,size(Fe,1)-2)] ;
    
%     K = [Ke,Ce';Ce,zeros(2)] ;
    
%     Ftot = [Fe;zeros(2,1)] ;
   
%     F = Ftot(1:size(Ftot)-2) ;
    
end

if patch==nPatch
    epsilon=1;
    
%         patch
%         ((patch-1+(1-epsilon)/2) -1 )*2+1
    
    sousDonnees=donnees ;
    sousDonnees.poutre.L = maillage(patch+(1-epsilon)/2)-maillage(patch-1+(1-epsilon)/2) ;
    sousDonnees.nombreElements = nSousElements ;
    
    sousMaillage = Mailleur_uniforme(sousDonnees) ;
    
    uhLocal = uh( ((patch-1+(1-epsilon)/2) -1 )*2+1 : (((patch-1+(1-epsilon)/2) -1 )*2+1) +3 ) ;
    
    Fe = Assemblage_F_element_fluxfree(sousMaillage,uhLocal,epsilon,poutre,sousPoutre) ;
    
%     Ke = AssemblageRigidite(sousMaillage,sousDonnees.poutre) ;
    
%    Fe(size(Fe,1)-1) = Fe(size(Fe,1)-1) + donnees.F ;
    
%     U=Ke\Fe ;
    
%     F=Fe;
    
end



% Assemblage F global (nul presque partout)

if patch==1
    
    F(1:(nSousElements+1)*2) =  Fe ;
    
elseif patch==nPatch
    
    
    F(size(F,1)-(nSousElements+1)*2+1 : size(F,1)) =  Fe ;

    % il faut projeter v !! (fait)
    F(size(F,1)-1) = F(size(F,1)-1) + donnees.F*sousDonnees.poutre.L* [-3/5 , -4/5 , 3/5 , 2/5]*uhLocal ;
    
else
    
    F( (2*nSousElements-1)*(patch-2)+(patch-1) : (2*nSousElements-1)*(patch-2)+(patch-1) + size(Fe,1)-1 ) = F( (2*nSousElements-1)*(patch-2)+(patch-1) : (2*nSousElements-1)*(patch-2)+(patch-1) + size(Fe,1)-1 ) + Fe ;
%     (2*nSousElements-1)*(patch-2)+(patch-1)
    
end



% ajout des CL

Fcl=[F;zeros(2,1)] ;





end

